Cloudflare Waiting Room に関する社長の禅問答に対処してみた
クラスメソッドはCloudflareのFair Shotプロジェクトに賛同し、ワクチン接種を推進する自治体・医療機関・協力企業にデジタル待合室Cloudflare Waiting Roomを無償提供しています。
前回、具体的な設定方法を公開したところ、オリジンサーバーへの変更なしに導入できる手軽さがうけて問い合わせが殺到しまして、うれしい悲鳴を上げながら大車輪で多くのサイトへの適用を進めていますので、ワクチン接種予約をされた方の中にはWaiting Roomを実際に目にした方もいらっしゃるかもしれません。
今回は導入サポートをするにあたって社長の横田から指摘が入った部分を公開します。Waiting RoomにまつわるCloudflare Core部分の設定の参考にしていただければ幸いです。
注) Waiting Roomはまだ一般提供されておらず、現在、ワクチン接種関連のサイトのみにFair Shotプロジェクトの一部として提供されています。ご利用の際は用途の審査がございますので、こちらよりお問い合わせください。
対処してみた
デモサイトの変更
いきなり本題と違うのですが、前回のブログを公開したところ、横田からメッセージが来ました。
というわけで、
このデモサイトから
「デザイン不要で超簡単フォーム的なもの」に変更しました。
デモ依頼があったときに、待合室の画面を表示する
これは実装時の動作確認に応用できるのですが、実際に順列を作って待合室の画面を実際のURLアクセス時に表示するには
このスイッチをOnにすることでシミュレーションできます。
待合室の日本語版テンプレートを提供する
こちらに公開しています。フッター部分のコピーライトのみ改変せずにお使いください。
[gist id="a4f00d99580e8a7bc99b1c047302be89"]
アクセスを日本国内に限定する
CloudflareのFirewall機能で実装します。簡単かつ優秀です。
テスト用に例外を設けたい場合はANDを使ってIPアドレスレンジやAS番号で指定します。
ドイツからアクセスしましたが、拒否されました。
Bot等のいたずらによる待合室の占拠を防ぐ
Cloudflareを通るトラフィックは内容が分析できます。
わたしが作り出したAWSの負荷テストCloudFormationによるトラフィックが紫で自動化リクエストと判定され、横田のApachBenchによるトラフィックは緑で半自動化リクエストと判定されています。Cloudflareはブラウザのインテグリティチェックにより、非ブラウザアクセスは必ず半自動化リクエスト以上の判定を受けます。
Cloudflareのスーパーbotファイトモードで、これらのリクエストに対処します。
自動化リクエスト、半自動化リクエストにはチャレンジを入れることでbotのアクセスコストを高くします。自動化リクエストはそのままブロックでも特に支障はないかと思います。一方でGoogleのクローラーなどのbotは許可します。
そのほかのうれしいこと
CloudflareのDNS、CDN、Firewallを通るため、基本的なDDOSプロテクションが施されていることと、攻撃時の攻撃下モードへの切り替えが可能です。
また、OWASPルールなどのマネージドルールが入っているため、PHP、SQLインジェクションなどのオリジンの穴はおおむね塞がれます。
ビジネスプランなどの安めのサブスクリプションでも購入すると、設定の幅も広がります。
ネームサーバーの変更ができない場合の対処
レジストラとの契約上、Waiting Roomの前提となっているDNSの委譲が困難なケースがありました。
ビジネスプラン以上のCloudflareのサブスクリプションがあると、CNAMEでのセットアップが可能ですので、受付サイトの運用期間中のみこちらを利用する手があります。
SBクラウドの松田氏がその手順をブログに執筆されているので参考になるかと思います。